//使用信号量实现线程的同步问题
#include<stdio.h>
#include<stdlib.h>
#include<pthread.h>
#include<semaphore.h>

//准备一个共享资源
char *buf[5];
//定义变量记录数组下标
int pos;
//1.定义信号量
sem_t sem;

void *task(void *pv)
{
	//3.获取信号量
	sem_wait(&sem);
	//4.访问共享资源
	buf[pos]=(char *)pv;
     sleep(1);
	pos++;
    //5.释放信号量
	sem_post(&sem);
}





int main()
{
    sem_init(&sem,0,1);//2.初始化互斥量
	
	//创建线程,使用pthread_create函数
	pthread_t thread;
	int errno=pthread_create(&thread,NULL,task,(void *)"张飞");

   pthread_t thread2;
   pthread_create(&thread2,NULL,task,(void *)"关羽");
   //等待子线程,使用pthread_join函数
	pthread_join(thread,NULL);
   //打印数组中的内容
   pthread_join(thread2,NULL);
    
    int i=0;
	for(i=0;i<pos;i++)
	{
		printf("%s ",buf[i]);
	}
	printf("\n");
    //6.销毁信号量
	sem_destroy(&sem);
	return 0;
}
